package unq.persistencia;

import java.util.List;

/**
 * TODO: description
 */
public class Equipo implements Nombrable {
    private List<Jugador> jugadores;

    private String nombre;

    private int Id;

    private Formacion formacion;

    public int getId() {
        return this.Id;
    }

    public void setId(final int id) {
        this.Id = id;
    }

    private Tecnico tecnico;

    public Equipo() {

    }

    public Equipo(final String nombre) {
        this.setNombre(nombre);
    }

    public Equipo(final String nombre, final List<Jugador> jugadores, final Tecnico tecnico) {
        this.setJugadores(jugadores);
        this.setNombre(nombre);
        this.setTecnico(tecnico);
    }

    public void setNombre(final String nombre) {
        this.nombre = nombre;
    }

    public Tecnico getTecnico() {
        return this.tecnico;
    }

    public void setTecnico(final Tecnico tecnico) {
        this.tecnico = tecnico;
    }

    public List<Jugador> getJugadores() {
        return this.jugadores;
    }

    public void setJugadores(final List<Jugador> jugadores) {
        this.jugadores = jugadores;
    }

    public Formacion getFormacion() {
        return this.formacion;
    }

    public void setFormacion(final Formacion formacion) {
        this.formacion = formacion;
    }

    public void armarFormacion() {
        this.setFormacion(this.getTecnico().armarFormacion(this));
    }

    @Override
    public String getNombre() {
        return this.nombre;
    }

    public Jugador mejorJugadorEnPosicion(final Posicion posicion, final List<Jugador> usados) {
        // Jugador jugador = this.getJugadores().get(0);
        Jugador jugador = this.primerJugadorQueNoEstaEnUso(usados);
        for (Jugador jug : this.getJugadores()) {
            if (jug.getValorHabilidad(posicion) > jugador.getValorHabilidad(posicion) && !usados.contains(jug)) {
                jugador = jug;
            }
        }
        return jugador;
    }

    public Jugador primerJugadorQueNoEstaEnUso(final List<Jugador> usados) {
        Jugador jug = null;
        for (Jugador jugador : this.getJugadores()) {
            if (!usados.contains(jugador) && jug == null) {
                jug = jugador;
            }
        }
        return jug;
    }
}
